package org.dxy.infrastructure.persistent.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.dxy.infrastructure.persistent.po.UnitManagePo;

import java.util.List;

/**
 * @description: 单位管理Service接口
 * @author: dxy
 * @createTime: 2025/1/21
 */
public interface UnitManageService extends IService<UnitManagePo> {

    /**
     * 根据单位编码查询单位
     * @param unitCode 单位编码
     * @return 单位实体
     */
    UnitManagePo getByUnitCode(String unitCode);

    /**
     * 根据单位类型查询单位列表
     * @param unitType 单位类型
     * @return 单位列表
     */
    List<UnitManagePo> listByUnitType(String unitType);

    /**
     * 根据状态查询单位列表
     * @param status 状态
     * @return 单位列表
     */
    List<UnitManagePo> listByStatus(Integer status);

    /**
     * 查询所有启用的单位（按排序字段排序）
     * @return 单位列表
     */
    List<UnitManagePo> listAllEnabled();

    /**
     * 根据基本单位ID查询相关单位
     * @param baseUnitId 基本单位ID
     * @return 单位列表
     */
    List<UnitManagePo> listByBaseUnitId(Long baseUnitId);

    /**
     * 分页查询单位列表
     * @param page 分页参数
     * @param query 查询条件
     * @return 分页结果
     */
    Page<UnitManagePo> pageQuery(Page<UnitManagePo> page, UnitManagePo query);

    /**
     * 检查单位编码是否存在
     * @param unitCode 单位编码
     * @param excludeId 排除的ID（用于更新时检查）
     * @return 是否存在
     */
    boolean existsByUnitCode(String unitCode, Long excludeId);

    /**
     * 批量删除单位
     * @param ids ID列表
     * @return 删除结果
     */
    boolean batchDelete(List<Long> ids);

    /**
     * 查询所有基础单位
     * @return 基础单位列表
     */
    List<UnitManagePo> listBaseUnits();

    /**
     * 根据单位类型查询基础单位
     * @param unitType 单位类型
     * @return 基础单位列表
     */
    List<UnitManagePo> listBaseUnitsByType(String unitType);
}